home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / comm / dde_10.zip / DDE.C next >
Text File  |  1991-03-01  |  29KB  |  722 lines

  1.  
  2. /* Standard Library include files */
  3. #include <search.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <malloc.h>
  7. #include <string.h>
  8. #include <memory.h>
  9. #include <dos.h>
  10.  
  11. /* TCXL Library includes */
  12. #include <tcxldef.h>
  13. #include <tcxlsel.h>
  14. #include <tcxlkey.h>
  15. #include <tcxlwin.h>
  16. #include <tcxlvid.h>
  17. #include <tcxlkey.h>
  18. #include <tcxlcod.h>
  19. #include <tcxlmou.h>
  20.  
  21.  
  22.  
  23. /*
  24. ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  25. ▓▓                                                                   ▓▓
  26. ▓▓ Structure for PROCOMM PLUS dialing directory entry.               ▓▓
  27. ▓▓                                                                   ▓▓
  28. ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
  29.        from the hook.c file that comes with procomm plus 2.0
  30. */
  31. typedef struct DDREC
  32.    {
  33.    char ddname[25],                    /* name */
  34.         ddphone[21];                   /* phone number */
  35.    int  ddbaud;                        /* baud rate as int */
  36.    char ddparity,                      /* parity as short int */
  37.         dddata,                        /* data bits as short int */
  38.         ddstop,                        /* stop bits as short int */
  39.         dddup,                         /* duplex as short int: 0 = full */
  40.         ddscript[9],                   /* ASPECT file w/o ext */
  41.         ddlast[9];                     /* last call: mm/dd/yy */
  42.    int  ddtotal;                       /* total connects */
  43.    char ddproto,                       /* default protocol as short int */
  44.         ddterm,                        /* terminal type as short int */
  45.         ddmode,                        /* 0 = mode, 1 = direct */
  46.         ddpassword[11],                /* like it says */
  47.         ddmacfile[9],                  /* keyboard macro file */
  48.         ddkbdfile[9],                  /* keyboard mapping file */
  49.         ddport,                        /* com port to use */
  50.         ddnotefile[9];                 /* note file */
  51.    } dd_entry;
  52.  
  53.  
  54.  
  55. #define DD_SIZE 200     /* size of the dialing directory with pcplus 2.0 */
  56.  
  57.  
  58. /*
  59.  *
  60.  *  Name: main()
  61.  *
  62.  *  Useage: called from o/s
  63.  *
  64.  *  Parameters: none
  65.  *
  66.  *  Returns: exits with errorlevel set to 0 if no problems occur
  67.  *
  68.  *  Function: main routine of PCPlus Dialing Directory Editor.
  69.  *
  70.  *  Written by: David Gersic                                    27 Feb 1991
  71.  *
  72.  */
  73.  
  74. void
  75. main()
  76. {
  77.  
  78.     /* variables */
  79.     dd_entry  *dial_dir,     /* old and new dialing directories */
  80.               *dial_new;
  81.     char      header[250],   /* header in dialing directory file */
  82.               *in_file,      /* input file name */
  83.               out_file[13];  /* output file name */
  84.  
  85.     /* functions */
  86.     int  read_ddir(char *, dd_entry *, char *),
  87.          write_ddir(char *, dd_entry *, char *),
  88.          modify_ddir(dd_entry *,dd_entry *);
  89.     char *get_in_file(void);
  90.     int  get_out_file(char *);
  91.  
  92.     TcxlInit();         /* initialize library */
  93.     VcurHid(0);         /* turn off cursor */
  94.  
  95.     Wopen(0,0,24,79,BOX_SPA,LGREY | _RED,LGREY | _RED);    /* main window */
  96.                                   /* set up title and credits */
  97.     Wgotoxy(24,0);
  98.     Wputs("      David Gersic                                        17 Feb. 1991");
  99.     Wopen(0,0,23,79,BOX_HOR,LGREY | _RED,LGREY | _RED);
  100.     Wtitle(" ProcommPlus 2.0 Dialing Directory Editor v1.0 ",TTL_CNT,YELLOW|_RED);
  101.  
  102.     while(in_file=get_in_file())       /* get input file name */
  103.     {                             /* loop terminates when <esc> is pressed */
  104.          if((dial_dir=(dd_entry *)malloc((DD_SIZE)*sizeof(dd_entry))) == NULL)
  105.          {
  106.               fprintf(stderr,"Malloc failed.\nExiting to DOS.\n");
  107.               exit(1);
  108.          }
  109.          if((dial_new=(dd_entry *)malloc((DD_SIZE)*sizeof(dd_entry))) == NULL)
  110.          {
  111.               fprintf(stderr,"Malloc failed.\nExiting to DOS.\n");
  112.               exit(1);
  113.          }
  114.          read_ddir(in_file,dial_dir,header);   /* read in dialing directory */
  115.          modify_ddir(dial_dir,dial_new);       /* re-arrange directory */  
  116.          Wclose();                          /* close edit windows */
  117.          Wclose();
  118.          if(get_out_file(out_file)==0)         /* get output file name */
  119.               write_ddir(out_file,dial_new,header); /* write out new dir */
  120.          free(dial_dir);                    /* free dynamic memory */
  121.          free(dial_new);
  122.     }
  123.     WcloseAll();                            /* close all windows and exit */
  124.     VcurHid(1);
  125.     exit(0);
  126. } /* end main() */
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133. /*
  134.  *
  135.  *  Name: read_ddir()
  136.  *
  137.  *  Useage: read_ddir(char *dd_name, dd_entry *dial_dir, char *header)
  138.  *
  139.  *  Parameters:    char *dd_name       filename of directory file to read in
  140.  *                 dd_entry *dial_dir  where to put directory read in
  141.  *                 char *header        where to store header
  142.  *
  143.  *  Returns: 0
  144.  *
  145.  *  Function: To read in a ProcommPlus 2.0 dialing directory file.
  146.  *
  147.  *  Written by: David Gersic                                    27 Feb 1991
  148.  *
  149.  */
  150.  
  151. int
  152. read_ddir(char *dd_name, dd_entry *dial_dir, char *header)
  153. {
  154.     FILE *dd_file;
  155.     int i=0;
  156.  
  157.     dd_file=fopen(dd_name,"rb");  /* open file for input, no translation */
  158.  
  159.     if(dd_file==NULL)             /* file not open */
  160.     {
  161.          fprintf(stderr,"Error opening input file.\nExiting to DOS.\n");
  162.          exit(1);
  163.     }
  164.  
  165.     fread(header,250,1,dd_file);  /* read header */
  166.     while(i<DD_SIZE)              /* read dialing directory entries */
  167.     {
  168.          if(fread((dial_dir+i),114,1,dd_file) != 1)   /* one at a time */
  169.          {
  170.               if(ferror(dd_file))                     /* error reading file */
  171.                    perror("Error reading file.\n");
  172.               else
  173.                    fprintf(stderr,"Unknown error reading file.\n");
  174.               fprintf(stderr,"Aborting!\n");
  175.               exit(1);                           /* abort to DOS */
  176.          }
  177.          i++;
  178.     }
  179.     fclose(dd_file);    
  180.     return(0);
  181. } /* end read_ddir() */
  182.  
  183.  
  184. /*
  185.  *
  186.  *  Name: write_ddir()
  187.  *
  188.  *  Useage: write_ddir(char *dd_name, dd_entry *dial_dir, char *header)
  189.  *
  190.  *  Parameters:    char *dd_name       filename to write out to
  191.  *                 dd_entry *dial_dir  memory image of directory to write out
  192.  *                 char *header        header saved by read_ddir()
  193.  *
  194.  *  Returns: 0
  195.  *
  196.  *  Function: To write out a ProcommPlus 2.0 dialing directory read in by
  197.  *            read_ddir().
  198.  *
  199.  *  Written by: David Gersic                                    27 Feb 1991
  200.  *
  201.  */
  202.  
  203. int
  204. write_ddir(char *dd_name, dd_entry *dial_dir, char *header)
  205. {
  206.     FILE *out_file;
  207.     int  i=0;
  208.  
  209.     out_file=fopen(dd_name,"wb");      /* open file, no translation */
  210.     if(out_file==NULL)                 /* file not open */
  211.     {
  212.          fprintf(stderr,"Error opening output file.\nExiting to DOS.\n");
  213.          exit(1);
  214.     }
  215.  
  216.     fwrite(header,250,1,out_file);     /* write header */
  217.     while(i<DD_SIZE)              /* write dialing directory entries */
  218.     {
  219.          if(fwrite((dial_dir+i),114,1,out_file) != 1) /* one at a time */
  220.          {
  221.               if(ferror(out_file))               /* error writing to file */
  222.                    perror("Error writing file.\n");
  223.               else
  224.                    fprintf(stderr,"Unknown error writing file.\n");
  225.               fprintf(stderr,"Aborting!\n");
  226.               exit(1);                      /* exit to o/s */
  227.          }
  228.          i++;
  229.     }
  230.     fclose(out_file);
  231.     return(0);
  232. } /* end write_ddir() */
  233.  
  234.  
  235. /*
  236.  *
  237.  *  Name: get_in_file()
  238.  *
  239.  *  Useage: get_in_file()
  240.  *
  241.  *  Parameters: none
  242.  *
  243.  *  Returns: pointer to the filename to be opened.
  244.  *
  245.  *  Function: To get a filename from a pick-list. It passes the name back
  246.  *            to the caller.
  247.  *
  248.  *  Written by: David Gersic                                    27 Feb 1991
  249.  *
  250.  */
  251.  
  252. char *
  253. get_in_file()
  254. {
  255.     char *file_name;
  256.     VOID  CTYP  AddShadow(NOARG); /* add drop-shadow to open window